package com.minesweeper.ui;

import com.minesweeper.data.GameData;
import com.minesweeper.dialog.AboutMinesweeper;
import com.minesweeper.dialog.RankingList;
import com.minesweeper.dialog.UserCustom;

import javax.swing.*;
import java.io.IOException;

/**
 * @author skniy
 */
public class GameMenuBar extends JMenuBar {

    /**
     * 游戏界面
     */
    private GameInterface gameInterface;
    /**
     * 游戏
     */
    private JMenu menuGame = new JMenu("游戏(G)");
    /**
     * 帮助
     */
    private JMenu menuHelp = new JMenu("帮助(H)");
    /**
     * 重新开始
     */
    private JMenuItem menuItemRestart = new JMenuItem("重新开始");
    /**
     * 保存游戏
     */
    private JMenuItem menuItemSave = new JMenuItem("保存游戏");
    /**
     * 载入游戏
     */
    private JMenuItem menuItemLoad = new JMenuItem("载入游戏");
    /**
     * 初级难度
     */
    private JMenuItem menuItemBeginner = new JMenuItem("初级");
    /**
     * 中级难度
     */
    private JMenuItem menuItemIntermediate = new JMenuItem("中级");
    /**
     * 高级难度
     */
    private JMenuItem menuItemAdvanced = new JMenuItem("高级");
    /**
     * 自定义
     */
    private JMenuItem menuItemUserCustom = new JMenuItem("自定义");
    /**
     * 排行榜
     */
    private JMenu menuRankingList = new JMenu("排行榜");
    /**
     * 初级排行榜
     */
    private JMenuItem menuItemBeginnerRankingList = new JMenuItem("初级排行榜");
    /**
     * 中级排行榜
     */
    private JMenuItem menuItemIntermediateRankingList = new JMenuItem("中级排行榜");
    /**
     * 高级排行榜
     */
    private JMenuItem menuItemAdvancedRankingList = new JMenuItem("高级排行榜");
    /**
     * 退出游戏
     */
    private JMenuItem menuItemExit = new JMenuItem("退出");
    /**
     * 关于扫雷
     */
    private JMenuItem menuItemAbout = new JMenuItem("关于扫雷");

    /**
     * 构造方法
     *
     * @param gameInterface
     */
    public GameMenuBar(GameInterface gameInterface) {
        this.gameInterface = gameInterface;
        //加入各组件
        addItems();
    }

    /**
     * 加入各组件
     */
    private void addItems() {
        //为两个菜单项设置快捷键   alt+对应字母
        menuGame.setMnemonic('G');
        menuHelp.setMnemonic('H');
        //填充游戏菜单
        //加入重新开始
        menuItemRestart.addActionListener(e -> gameInterface.restartGame());
        menuGame.add(menuItemRestart);
        //加入保存游戏
        menuItemSave.addActionListener(e -> {
            try {
                gameInterface.saveGame();
            } catch (IOException ex) {
                ex.printStackTrace();
            }
        });
        menuGame.add(menuItemSave);
        //加入载入游戏
        menuItemLoad.addActionListener(e -> {
            try {
                gameInterface.loadGame();
            } catch (IOException ex) {
                ex.printStackTrace();
            }
        });
        menuGame.add(menuItemLoad);
        //加入分割线
        menuGame.addSeparator();
        //加入初级选项
        menuItemBeginner.addActionListener(e -> {
            GameData.ROWS = 9;
            GameData.COLS = 9;
            GameData.MINE_COUNT = 10;
            GameData.GAME_LEVEL=0;
            gameInterface.restartGame();
        });
        menuGame.add(menuItemBeginner);
        //加入中级选项
        menuItemIntermediate.addActionListener(e -> {
            GameData.ROWS = 16;
            GameData.COLS = 16;
            GameData.MINE_COUNT = 40;
            GameData.GAME_LEVEL=1;
            gameInterface.restartGame();
        });
        menuGame.add(menuItemIntermediate);
        //加入高级选项
        menuItemAdvanced.addActionListener(e -> {
            GameData.ROWS = 16;
            GameData.COLS = 30;
            GameData.MINE_COUNT = 99;
            GameData.GAME_LEVEL=2;
            gameInterface.restartGame();
        });
        menuGame.add(menuItemAdvanced);
        //加入分割线
        menuGame.addSeparator();
        //加入用户自定义选项
        menuItemUserCustom.addActionListener(e -> new UserCustom(gameInterface));
        menuGame.add(menuItemUserCustom);
        //加入分割线
        menuGame.addSeparator();
        //加入排行榜
        addRankList();
        menuRankingList.add(menuItemAdvancedRankingList);
        //加入排行榜
        menuGame.add(menuRankingList);
        //加入分割线
        menuGame.addSeparator();
        //加入退出
        menuItemExit.addActionListener(e -> System.exit(0));
        menuGame.add(menuItemExit);
        //填充帮助菜单
        //加入关于扫雷
        menuItemAbout.addActionListener(e -> new AboutMinesweeper(gameInterface));
        menuHelp.add(menuItemAbout);
        //两个菜单项加入到菜单栏中
        this.add(menuGame);
        this.add(menuHelp);
    }

    /**
     * 加入排行榜
     */
    private void addRankList() {
        //初级排行榜
        menuItemBeginnerRankingList.addActionListener(e -> {
            try {
                new RankingList(0, gameInterface);
            } catch (IOException ex) {
                ex.printStackTrace();
            }
        });
        menuRankingList.add(menuItemBeginnerRankingList);
        //中级排行榜
        menuItemIntermediateRankingList.addActionListener(e -> {
            try {
                new RankingList(1, gameInterface);
            } catch (IOException ex) {
                ex.printStackTrace();
            }
        });
        menuRankingList.add(menuItemIntermediateRankingList);
        //高级排行榜
        menuItemAdvancedRankingList.addActionListener(e -> {
            try {
                new RankingList(2, gameInterface);
            } catch (IOException ex) {
                ex.printStackTrace();
            }
        });
    }

}
